// 该题的设定是一定存在一个环
// 可以用快慢双指针，来取到环中的一个值，判断相遇点的值是否为 1
class Solution {
    public boolean isHappy(int n) {
        if(n == 1) {
            return true;
        }

        int slow = n;
        int fast = squareAdd(n);
        while(slow != fast) {
            slow = squareAdd(slow);
            fast = squareAdd(squareAdd(fast));
        }
        return slow == 1;
    }

    public int squareAdd(int n) {
        int sum = 0;
        while(n != 0) {
            sum = sum + ((n % 10) * (n % 10));
            n = n / 10;
        }
        return sum;
    }
}